#include <stdio.h>
#include <stdlib.h>

//使用联合体判断大小端,如果是小端返回1，如果是大端返回0.

// union
// {
//     int m;
//     char n;
// } a;
// int fun ()
// {
//     a.m=1;
//     if (a.n==1)
//         return 1;
//     return 0;
// }
// int main ()
// {
//     printf ("%d\n",fun());
//     return 0;
// }


//malloc caloloc realloc free 使用

// void print (int *p,size_t size)
// {
//     for (int i=0;i<size;i++)
//         printf ("%d ",p[i]);
//     printf ("\n");
// }
// int main ()
// {
//     //malloc
//     int *p = (int * )malloc(10*sizeof(int));
//     if (p==NULL)
//     {
//         perror("malloc");
//         return 1;
//     }
//     for (int i=0;i<10;i++)
//         p[i]=i+2;
//     print (p,10);
//     //calloc
//     int *p1=(int *)calloc(10,sizeof(int));
//     if (p1==NULL)
//     {
//         perror("calloc");
//         return 1;
//     }
//     print (p1,10);
//     for (int i=0;i<10;i++)
//         p1[i]=i+8;
//     print (p1,10);
//     //ralloc
//     int *ptr =(int *)realloc(p,20*sizeof(int));
//     if (ptr!=NULL)
//     {
//         p=ptr;
//         ptr=NULL;
//     }
//     for (int i=10;i<20;i++)
//         p[i]=i+2;
//     print (p,20);
//     free(p);
//     p=NULL;
//     free(p1);
//     p1=NULL;
//     return 0;
// }

//malloc 模拟创建二维数组
// int main ()
// {
//     int **p = (int **)malloc(sizeof (int*)*4);
//     for (int i=0;i<3;i++)
//         p[i]=(int *)malloc(sizeof (int)*5);
//     //初始化，打印
//     for (int i=0;i<3;i++)
//     {
//         for (int j=0;j<5;j++)
//         {
//             p[i][j]=j+3;
//             printf ("%d ",p[i][j]);
//         }
//         printf ("\n");
//         free(p[i]);
//         p[i]=NULL;
//     }
//     free(p);
//     p=NULL;
//     return 0;
// }

//拷贝文件
// int main ()
// {
//     //原文件
//     FILE *pf=fopen("data.txt","r");
//     if(pf==NULL)
//     {
//         perror("fopen");
//         return 1;
//     }
//     //拷贝文件
//     FILE *pfc=fopen("data_copy.txt","w");
//     if(pfc==NULL)
//     {
//         perror("fopen_1");
//         fclose(pf);
//         pf=NULL;
//         return 1;
//     }
//     int c=0;
//     while((c=fgetc(pf))!=EOF)
//         fputc(c,pfc);
//     fclose(pf);
//     pf=NULL;
//     fclose(pfc);
//     pfc=NULL;
//     return 0;
// }

// //模拟实现offsetof宏
// #include<stddef.h>
// struct S
// {
//     char a;
//     int b;
//     char c;
// };
// #define OFFSETOF(type,mem) (size_t)&(((type*)0) -> mem)
// //把‘0’强转成结构体指针，当作结构体首元素地址，其中各元素的地址数值上就等于偏移量，
// //通过‘—>’找到各元素，再取各元素的地址强转成size_t,得到的就是偏移量。
// int main ()
// {
//     printf ("%zd\n",offsetof(struct S,c));
//     printf ("%zd\n",OFFSETOF(struct S,b));
//     return 0;
// }

//通过宏 实现一个整数二进制位的奇数位和偶数位交换
#define SWAP(n) ((((n)&0x55555555)<<1)|(((n)&0xaaaaaaaa)>>1))
int main ()
{
    int n=13;
    printf ("%d\n",SWAP(n));
    return 0;
}